From d7cfee4b1617527207eebd447f0b687e75a2050d Mon Sep 17 00:00:00 2001 From: Kristian Rietveld Date: Sun, 19 Jun 2005 19:22:46 +0000 Subject: [PATCH] added a check which avoids processing updates on bin_window and scrolling 2005-06-19 Kristian Rietveld * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a check which avoids processing updates on bin_window and scrolling if the node is already visible. (#170600, Billy Biggs). --- ChangeLog | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ gtk/gtktreeview.c | 13 +++++++++++-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7da0dce54e..4a7ef36973 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-06-19 Kristian Rietveld + + * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a + check which avoids processing updates on bin_window and scrolling + if the node is already visible. (#170600, Billy Biggs). + 2005-06-19 Kristian Rietveld * gtk/gtktreeview.c (validate_visible_area): only keep the diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 7da0dce54e..4a7ef36973 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2005-06-19 Kristian Rietveld + + * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a + check which avoids processing updates on bin_window and scrolling + if the node is already visible. (#170600, Billy Biggs). + 2005-06-19 Kristian Rietveld * gtk/gtktreeview.c (validate_visible_area): only keep the diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 7da0dce54e..4a7ef36973 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2005-06-19 Kristian Rietveld + + * gtk/gtktreeview.c (gtk_tree_view_clamp_node_visible): added a + check which avoids processing updates on bin_window and scrolling + if the node is already visible. (#170600, Billy Biggs). + 2005-06-19 Kristian Rietveld * gtk/gtktreeview.c (validate_visible_area): only keep the diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 28e1218913..e3bf7069e3 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -4561,7 +4561,7 @@ validate_row (GtkTreeView *tree_view, gboolean retval = FALSE; gboolean is_separator = FALSE; gint focus_pad; - + /* double check the row needs validating */ if (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID) && ! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_COLUMN_INVALID)) @@ -7828,13 +7828,22 @@ gtk_tree_view_clamp_node_visible (GtkTreeView *tree_view, GtkRBTree *tree, GtkRBNode *node) { + gint node_dy, height; GtkTreePath *path = NULL; if (!GTK_WIDGET_REALIZED (tree_view)) return; - path = _gtk_tree_view_find_path (tree_view, tree, node); + /* just return if the node is visible, avoiding a costly expose */ + node_dy = _gtk_rbtree_node_find_offset (tree, node); + height = ROW_HEIGHT (tree_view, GTK_RBNODE_GET_HEIGHT (node)); + if (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_INVALID) + && node_dy >= tree_view->priv->vadjustment->value + && node_dy + height <= (tree_view->priv->vadjustment->value + + tree_view->priv->vadjustment->page_size)) + return; + path = _gtk_tree_view_find_path (tree_view, tree, node); if (path) { /* We process updates because we want to clear old selected items when we scroll. -- 2.30.2